// 统一响应处理中间件
// 该中间件为响应对象添加统一的响应方法，使响应格式标准化

/**
 * 统一响应处理中间件函数
 * 为res对象添加success、error、paginated等方法，实现响应格式统一
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 * @param {Function} next - 下一个中间件函数
 * @returns {void}
 */
module.exports = (req, res, next) => {
  /**
   * 成功响应方法
   * @param {any} data - 返回的数据
   * @param {string} message - 返回的消息
   * @returns {Object} 标准化的成功响应
   */
  res.success = (data, message = '操作成功') => {
    res.send({
      status: 0,           // 状态码，0表示成功
      message,             // 消息描述
      data                 // 返回的数据
    });
  };

  /**
   * 失败响应方法
   * @param {string} message - 错误消息
   * @param {number} status - 状态码，1表示失败
   * @param {number} code - HTTP状态码
   * @returns {Object} 标准化的错误响应
   */
  res.error = (message = '操作失败', status = 1, code = 200) => {
    const response = { status, message };
    res.status(code).send(response);
  };

  /**
   * 分页响应方法
   * @param {Array} data - 返回的数据列表
   * @param {Object} pagination - 分页信息
   * @param {string} message - 返回的消息
   * @returns {Object} 标准化的分页响应
   */
  res.paginated = (data, pagination, message = '获取成功') => {
    res.send({
      status: 0,           // 状态码，0表示成功
      message,             // 消息描述
      data,                // 返回的数据列表
      pagination           // 分页信息
    });
  };

  /**
   * 无数据响应方法
   * @param {string} message - 返回的消息
   * @returns {Object} 标准化的无数据响应
   */
  res.noContent = (message = '无数据') => {
    res.status(204).send({
      status: 0,           // 状态码，0表示成功
      message              // 消息描述
    });
  };

  // 调用下一个中间件
  next();
};